package com.ybc.reactor;

import reactor.core.publisher.Flux;

//flux用于发出多个数据项 关键是next方法 表示发布一个数据项 就是每次被订阅者操作一次的数据
public class FluxDemo {
    public static void main(String[] args) {
        test();
    }


    static void test2() {
        // 创建一个 Flux，发出多个元素
        Flux<String> flux = Flux.just("Apple", "Banana", "Cherry");

        // 订阅 Flux 并打印每一个元素
        flux.subscribe(fruit -> {
            System.out.println("收到: " + fruit);
        });

    }

    static void test() {

        String text = "Hello, world!";  // 要逐字输出的字符串

        // 创建一个 Flux，将字符串拆分成字符流
        Flux<Character> flux = Flux.create(sink -> {
            for (char c : text.toCharArray()) {
                // 每发出一个字符就触发订阅者  是flux专属的 多个数据项
                sink.next(c);
                try {
                    Thread.sleep(200);  // 模拟延迟，每个字符间隔200ms
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            sink.complete();  // 完成发出所有字符
        });

        // 订阅 Flux 并打印每个字符
        flux.subscribe(
                character -> System.out.print(character),  // 输出每个字符
                error -> System.err.println("Error: " + error),  // 错误处理
                () -> System.out.println("\nFinished!")  // 完成后输出
        );
    }


}
